package com.mindao.app.weixin.utils;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;

import com.jfinal.weixin.sdk.api.ApiConfig;
import com.jfinal.weixin.sdk.api.ApiConfigKit;
import com.jfinal.weixin.sdk.api.ApiResult;
import com.jfinal.weixin.sdk.api.QrcodeApi;
import com.jfinal.weixin.sdk.api.SnsAccessToken;
import com.jfinal.weixin.sdk.api.SnsAccessTokenApi;
import com.jfinal.weixin.sdk.api.SnsApi;
import com.mindao.app.common.spring.service.BaseService;
import com.mindao.app.weixin.model.WxmpUserInfo;
import com.mindao.app.weixin.service.WxmpUserInfoService;
import com.mindao.utils.config.EaCommonUtils;

/**
/* 版权所有： 广州敏道科技有限公司
/*
/* 功能描述：
/*
/* 创 建 人：李国才
/* 创建时间：2016年5月25日 下午5:42:53 	
 **/
public class WxmpConfUtils {
 
//	1、临时二维码，是有过期时间的，最长可以设置为在二维码生成后的30天（即2592000秒）后过期，但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景
//	2、永久二维码，是无过期时间的，但数量较少（目前为最多10万个）。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。
	private final static long QRCODE_TEMP_MAX_SECONDES  = 2592000;
	
//	public final static Map<String,String> opend2NicknameMap =new HashMap<String,String>();
	
	public static   ApiConfig getApiConfig(){
 
		ApiConfig apiConfig=ApiConfigKit.getApiConfig();
 
		return apiConfig;
	}
 
	/**
	 * 从微信OAuth认证过来的请求，得到用户openid和相关用户对象
	 * @param session
	 * @param code
	 * @param state
	 * @return openid
	 */
	public static String getWeixinUserInfo(HttpSession session,String code,String state){
		ApiConfig apiConfig=WxmpConfUtils.getApiConfig();
		System.out.println("----------------------------------auth para:");
		System.out.println("code:"+code); 
		System.out.println("state:"+state);
		SnsAccessToken snsAccessToken =  SnsAccessTokenApi.getSnsAccessToken(  apiConfig.getAppId(), apiConfig.getAppSecret(), code);
		String openid=snsAccessToken.getOpenid();
		System.out.println("openid:"+openid); 
		System.out.println("snsAccessToken:"+snsAccessToken.getAccessToken()); 
		if (openid!=null){
		
			//判断用户是否存在
			//String nickname=getNicknameByOpenid(openid);
            //if (nickname==null){
			    //每次用户登录，都强制重新读取更新用户信息
    			session.setAttribute(WeixinConstants.SESSION_OPENID, snsAccessToken.getOpenid());
    			//仅用户已关注微信号后使用该接口
    			//ApiResult userInfo =UserApi.getUserInfo(snsAccessToken.getOpenid());
    			ApiResult  userInfo = SnsApi.getUserInfo(snsAccessToken.getAccessToken(), openid);
    			WxmpUserInfoService wxmpUserInfoService=(WxmpUserInfoService)EaCommonUtils.getBean("wxmpUserInfoService");
    			WxmpUserInfo wxInfo=wxmpUserInfoService.updateUserInfo(openid, userInfo);
    			System.out.println("nickname:"+wxInfo.getNickname());
    			session.setAttribute(WeixinConstants.SESSION_NICKNAME,  wxInfo.getNickname());
            //}
		}
		return openid;
	}
	
	public static String getValueByKey(String modelName,String keyName,String keyValue,String fieldName){
		if (StringUtils.isBlank(keyValue))return "";
		BaseService baseService =(BaseService)EaCommonUtils.getBean("baseService");
		List list= baseService.find("select "+fieldName+" from "+modelName+" where "+keyName+"='"+keyValue+"' and status>-1 order by  id desc");
		if (list.isEmpty()){
			return "";
		}else{
			return list.get(0).toString();
		}
	}
//	/**
//	 * 前台根据用户Id显示用户姓名
//	 * @param id
//	 * @return
//	 */
//	public static String getNicknameByOpenid(String openid){
//		if (openid!=null){
//			String nickname=opend2NicknameMap.get(openid);
//			if (nickname!=null){
//				return nickname;
//			}else{
//				WeixinUserInfoService weixinUserInfoService=(WeixinUserInfoService)EaCommonUtils.getBean("weixinUserInfoService");
//				nickname=weixinUserInfoService.getUserNicknameByOpenid(openid);
//				if (nickname!=null){
//					opend2NicknameMap.put(openid, nickname);
//				}
//				return nickname;
//			}
//		}else{
//			return "";
//		}
//	}
}
